#ifndef KNOB_H_
#define KNOB_H_

#include <driver/gpio.h>
#include <functional>
#include <esp_log.h>
#include <iot_knob.h>

/**
 * @brief 旋钮控制类
 * 
 * 提供旋转编码器的初始化和事件处理功能
 */
class Knob {
public:
    /**
     * @brief 构造函数
     * 
     * @param pin_a 旋钮A相引脚
     * @param pin_b 旋钮B相引脚
     */
    Knob(gpio_num_t pin_a, gpio_num_t pin_b);
    
    /**
     * @brief 析构函数
     */
    ~Knob();

    /**
     * @brief 设置旋钮旋转回调函数
     * 
     * @param callback 旋转回调函数，参数为旋转方向(true为顺时针，false为逆时针)
     */
    void OnRotate(std::function<void(bool)> callback);

private:
    /**
     * @brief 旋钮事件回调函数
     * 
     * @param arg 用户参数
     * @param data 事件数据
     */
    static void knob_callback(void* arg, void* data);

    /**
     * @brief 旋钮句柄
     */
    knob_handle_t knob_handle_;
    
    /**
     * @brief 旋钮A相引脚
     */
    gpio_num_t pin_a_;
    
    /**
     * @brief 旋钮B相引脚
     */
    gpio_num_t pin_b_;
    
    /**
     * @brief 旋转回调函数
     */
    std::function<void(bool)> on_rotate_;
};

#endif // KNOB_H_